package com.demo.expertsystemdemo.service.mongodb.simple;

import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lzb22
 */
@Service
public class ViewService {

    private final MongoTemplate mongoTemplate;

    public ViewService(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    /**
     * 创建视图
     * viewName 设置视图名
     * collectionName 设置获取数据的集合名称
     * @return 创建视图结果
     */
    public Object createView(String viewName,String collectionName) {
        // 定义视图的管道,可是设置视图显示的内容多个筛选条件
        List<Bson> pipeline = new ArrayList<>();
        // 设置条件，用于筛选集合中的文档数据，只有符合条件的才会映射到视图中
        pipeline.add(Document.parse("{\"$match\":{\"sex\":\"女\"}}"));
        // 执行创建视图
        mongoTemplate.getDb().createView(viewName, collectionName, pipeline);
        // 检测新的集合是否存在，返回创建结果
        return mongoTemplate.collectionExists(viewName) ? "Success" : "Fail";
    }

    /**
     * 删除视图
     * viewName 待删除的视图名称
     * @return 删除视图结果
     */
    public Object dropView(String viewName) {
        // 检测视图是否存在
        if (mongoTemplate.collectionExists(viewName)) {
            // 删除视图
            mongoTemplate.getDb().getCollection(viewName).drop();
            return "Delete Success";
        }
        // 检测新的集合是否存在，返回创建结果
        return !mongoTemplate.collectionExists(viewName) ? "Success" : "Fail";
    }
}
